package com.kyrie.lib_sys.utils.learn.designPattern.singleton;

/**
 * 单例模式
 *
 * @author heefM
 * @date 2025-07-22
 */
public class SingletonPattern {

    /**
     * 定义一个静态成员变量
     */
    private static volatile SingletonPattern instance;

    /**
     * 私有构造方法(这个私有很关键)
     */
    private SingletonPattern(){}

    /**
     * 懒汉式 (双重鉴定实现方式)  -->当没有实例的时候才创建实例
     * @return
     */
    public static SingletonPattern getInstance(){
        if (instance == null) {
            synchronized (SingletonPattern.class) {
                if (instance == null) {
                    instance = new SingletonPattern();
                }
            }
        }
        return instance;
    }

    /**
     *    饿汉式 不管别的,先创建了再说 (一开始就new SingletonPattern)
     *
     */
//    private static SingletonPattern getInstance1(){
//        return SingletonPattern();
//    }



    /**
     * 测试方法
     * @param args
     */
    public static void main(String[] args) {
        SingletonPattern instance = SingletonPattern.getInstance();
        SingletonPattern instance1 = SingletonPattern.getInstance();
        //如果这两个实例相同(为true)，则说明单例模式成功
        System.out.println(instance == instance1);


//        SingletonPattern instance2 = SingletonPattern.getInstance1();
//        SingletonPattern instance3 = SingletonPattern.getInstance1();
//        //如果这两个实例相同(为true)，则说明单例模式成功
//        System.out.println(instance2 == instance3);

    }



}
